//app.js
const myAudio = wx.getBackgroundAudioManager()
App({
  onLaunch: function () {
  },
  onError: function () {
    // 监听小程序流程错误，当检测到错误时候进行小程序的重载
    console.log("出错了！！")
    // wx.reLaunch({
    //   url: '/pages/index/index'
    // })
  },
  onHide: function (res) {
    // 监听小程序隐藏，获取阅读记录，发送给后台进行统计
    const visitTimes = wx.getStorageSync('visitTimes')
    const saveTimes = wx.getStorageSync('saveTimes')
    if (visitTimes || visitTimes != {}) {
      wx.request({
        url: 'https://yutoudoufutang.top/easy/index.php?c=wish&m=Count',
        data: {
          saveTimes,
          visitTimes,
          appName: this.globalData.appName,
          token: this.globalData.token
        },
        method: 'post',
        success: function (res) {
          const data = {}
          wx.setStorageSync('visitTimes', data)
          wx.setStorageSync('saveTimes', data)
          console.log(res)
        }
      })
    }
    // 暂停背景音乐
    this.globalData.isMusic = true
    myAudio.pause()
  },
  globalData: {
    // 存储从index上传的图片，在making中来调用
    makingImgs:[],
    // 存储音频内容
    music: {},
    // 音频是否播放
    isMusic: false,
    // 由于广告可能会影响到观看，改字段用于控制首页的gif是否要向上移动
    gifHeight: '0',
    // 用于保存分享进来的模板信息，用于让分享进来看到的模板，与上传图片后进入making页的模板一致
    shareAlbumData:{},
    // 用于making页面返回index页面时候，=1时说明在index的onShow中要重置music，=0时不需要，使用后要回复初始值0
    changeMusic:0
  },
  // 创建/更新音频
  createMusic: function (music, that) {
    this.globalData.music = music
    if (music.audio) {
      myAudio.stop()
      myAudio.title = music.title
      myAudio.coverImgUrl = music.cover
      myAudio.src = music.audio
    }
    // 自然播放结束重新播放
    myAudio.onEnded(() => {
      this.createMusic(this.globalData.music, that)
    })
  },
  /**
   * 设置监听器
   */
  setWatcher(data, watch) { // 接收index.js传过来的data对象和watch对象
    Object.keys(watch).forEach(v => { // 将watch对象内的key遍历
      this.observe(data, v, watch[v]); // 监听data内的v属性，传入watch内对应函数以调用
    })
  },

  // setWatcher(data, watch) {
  //   Object.keys(watch).forEach(v => {
  //     let key = v.split('.'); // 将watch中的属性以'.'切分成数组
  //     let nowData = data; // 将data赋值给nowData
  //     for (let i = 0; i < key.length - 1; i++) { // 遍历key数组的元素，除了最后一个！
  //       nowData = nowData[key[i]]; // 将nowData指向它的key属性对象
  //     }
  //     let lastKey = key[key.length - 1];
  //     // 假设key==='my.name',此时nowData===data['my']===data.my,lastKey==='name'
  //     this.observe(nowData, lastKey, watch[v]); // 监听nowData对象的lastKey
  //   })
  // },

  /**
   * 监听属性 并执行监听函数
   */
  observe(obj, key, watchFun) {
    var val = obj[key]; // 给该属性设默认值
    Object.defineProperty(obj, key, {
      configurable: true,
      enumerable: true,
      set: function (value) {
        val = value;
        watchFun(value, val); // 赋值(set)时，调用对应函数
      },
      get: function () {
        return val;
      }
    })
  }
})